Git和ssh Key

SSH key与公钥

[ssh基础]

配置多个ssh

新建config文件,指定HostName对应的IdentityFile
$PS: github的Host 和 HostName 必须都是github.com; 上面那个不一样也没事
或者都在C:/Users/Administrator/.ssh/下,命名不同的id_rsa文件名, id_work1/work2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 该文件用于配置私钥对应的服务器
# Default github user(first@mail.com)
Host compa
HostName 192.168.1.5
PreferredAuthentications publickey
User xxxxx
IdentityFile C:/Users/Administrator/.ssh/compa/id_rsa
# Port 443
# UserKnownHostsFile /dev/null
# StrictHostKeyChecking no/ask/yes

# second user(second@mail.com)
# 建一个github别名,新建的帐号使用这个别名做克隆和更新
Host github.com
HostName github.com
PreferredAuthentications publickey
User xxxxx
IdentityFile D:/ablob/.ssh/github/id_rsa
# UserKnownHostsFile /dev/null
# StrictHostKeyChecking no

Host 表示来源地址匹配字段
HostName表示源地址
IdentityFile 则为私匙文件地址
PreferredAuthentications 权限
User 配置私匙的用户名称
多个账号可以写相同的Host User不要一样

$PS: compd的gitlib配置了config没有成功,发现是没有开启ssh,并不是配置失败(换成http, clone可以成功,如果是ssh就不可以)
$PS: compd的gitlib 换了http 提交(强制)也没有成功,把项目(pazhihu) 删除,重新建立就正常了。(也不是私有权限的原因,新建仓库切换成私有也可以提交成功)

注意事项

#### 1 下面几种写法都可以
C:\Users\xxxxx\.ssh\github\id_rsa
C:/Users/xxxxx/.ssh/reader/id_rsa
C:\Users\xxxxx.ssh\compd\id_rsa

$_abolish: 因为config id_rsa文件路径不对(没有到id_rsa)。所以每次都需要重新指定位置。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
~~ \#### 2 `ssh-keygen; ssh-add` 需要在当前项目中执行。如果在其他目录执行,并不会配置成功   ~~
~~ \#### 3 每次都要ssh-add 添加id_rsa 到ssh-agent ~~


\#11 [是否必须每次添加ssh-add](https://segmentfault.com/q/1010000000835302)
我的repo 分别推送到github,gitcafe。 正确添加了两个公钥私钥之后,并命名为id_github和id_gitcafe,发现每次push 代码 都必须重新ssh-add 上私钥。将id_github 名改回默认的id_rsa,就可以直接push了。但是gitcafe 被拒绝。有没有办法可以一次都设置上,不需要每次 ssh-add 私钥的。


你首先得了解一件事:ssh-add 这个命令不是用来永久性的记住你所使用的私钥的。实际上,它的作用只是把你指定的私钥添加到 ssh-agent 所管理的一个 session 当中。而 ssh-agent 是一个用于存储私钥的临时性的 session 服务,也就是说当你重启之后,ssh-agent 服务也就重置了。

如果是为了永久记住对应的私钥是哪个,我们不能依赖 ssh-agent 服务。能依赖什么则取决于以下哪些方案适合你的使用场景。

\## 有没有简单点的办法?
有。如果 ssh-add 已经可以满足你的要求(除了启动以后还要再来一遍以外),那么你完全可以用脚本自动化这件事。简单地把你输入的 ssh-add 命令的内容写进 .bashrc 或 .bash_profile(或其他任何你使用的 shell 环境配置文件)中去,这样只要你打开终端,就等于自动做了这件事情。

不过如我之前所说,这个机制是依赖 ssh-agent 服务的,并且只能在终端下有效。而用 Keychain 机制的话,是整个系统内都有效的(包括不依赖终端的应用程序)并且无需开启 ssh-agent 服务。

最后 Keychain 服务不是只有 Mac 才有的,我刚才搜索了一下,Windows 和 各种 Linux 都有对应的机制,不过我没用过,只能以 Mac 为例了。了解了这些概念,相信你可以自己查得到具体的方法。


关于 Host 和 Hostname 的对应关系,如果 Hostname 是域名则最好保持一致。但是这里有两个诀窍:
1. 如果同一域名下有两个不同的配置怎么办?Host 后面对应的是 Github 的两个用户名,
2. 如果域名是数字 IP,是否可以简化呢? Host 可以帮助你把对应的 IP 变成好记的名字。
$PS: 即host为Hostname(可以是ip)的域名;如果不是ip,最好保持一致

\#11 end ***************************

vscode 配置git/ssh

直接点击push不能提交,报deny,权限不足,即使remote的url是git@git.hub.com:user/repository
而且此时, c:..user\administartor.ssh 下已经有config配置了(当前是两个rsa:gitlib,github);
用Git Bash的时候可以提交, 而且是根据config的配置 弹窗 输入密码后 提交
$Question:如果github配置的ssh没有密码,是否可以直接提交
#### 修正
Support git with private key password
git config --global core.sshCommand "C:/Windows/System32/OpenSSH/ssh.exe"

1
2
3
4
5
6
7
8
9
10
1. Make Git use the OpenSSH that comes with Windows instead of the one that comes with Git.
git config --global core.sshCommand "C:/Windows/System32/OpenSSH/ssh.exe"
2. Set the ssh-agent service (not the one that comes with git) to run automatically.
Open Task Manager, Services tab, click Open Services.
Find OpenSSH Authentication Agent, open properties, set Startup Type to Automatic, hit OK.
Also start the service or restart your computer.
3. Add your password protected key to the agent.
ssh-add
It should automatically pick up keys stored in C:\Users\%USERNAME%\.ssh which is where ssh-keygen creates them.
Enter your password(s) at the prompt.

是可以通过push提交
问题:

  1. 提交的时候不需要密码
  2. 只有新建的ssh有用,如果用之前配过的,比如: ablob.ssh\id_rsa 就会报错
    ssh-add .ssh/id_rsa (从ablob复制过来)
  3. 貌似设置新的ssh后原先的(ablob)也没有输入密码就提交了
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    @ WARNING: UNPROTECTED PRIVATE KEY FILE! @
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    Permissions for 'D:/ablob/.ssh/id_rsa' are too open.
    It is required that your private key files are NOT accessible by others.
    This private key will be ignored.
    Load key "D:/ablob/.ssh/id_rsa": bad permissions
    git@github.com: Permission denied (publickey).
    fatal: Could not read from remote repository.

    Please make sure you have the correct access rights
    and the repository exists.

#### git-credential-store - Helper
git-credential-store:https://git-scm.com/docs/git-credential-store
git-credential-store - Helper to store credentials on disk
保存密码在文件中,可以不用设置ssh,https的远程仓库也可以提交.
不足:保存密码的文件权限需要专门设置权限,来保证安全性

$PS: 余下都是一些设置ssh的教程,没有设置密码.可能不设置密码可以push成功

knowledge is no pay,reward is kindness
0%